package com.shensi.appCollect.dao;

import com.shensi.appCollect.pojo.CouponIssue;
import com.shensi.appCollect.pojo.CouponTemplate;
import com.shensi.appCollect.pojo.CouponUser;
import com.shensi.appCollect.pojo.*;
import com.shensi.appCollect.pojo.dto.CouponUserDto;
import com.shensi.appCollect.pojo.vo.CouponPushMessageRuleVo;
import com.shensi.appCollect.pojo.vo.CouponUserVo;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 优惠券
 */
public interface CouponMapper {

    // 根据活动 ID 查询对应的 issue_id 列表
    public  List<String> getIssueIdsByActivityId(String activityId);

    // 根据活动 ID 查询对应的 issue_id 列表
    public  List<String> getIssueIdsandCouponByActivityId(String activityId);


    // Mapper 接口
    BigDecimal getThresholdAmtByActivityIdAndAmt(@Param("activityId") String activityId, @Param("receivedAmt") BigDecimal receivedAmt);
    List<String> getIssueIdsByThresholdAmt(@Param("activityId") String activityId, @Param("thresholdAmt") BigDecimal thresholdAmt);


    public  Map<String,Object> getActivityAllByActivityId(String activityId);

    public String getSuperGrow(Map<String, Object> param);

    public String getGrow(Map<String, Object> param);

    public  List<String> checkCouponActivity(Map<String, Object> param);

    public List<String> checkCouponActivityOnLabel(Map<String, Object> param);

    public String checkLabelCouponActivity(Map<String, Object> param);

    public String checkThresholdCouponActivity(Map<String, Object> param);
    /***
     * 查询领取方式下优惠券
     * @param param
     * @return
     */
    List<CouponIssue> selectCouponListByCouponIssueId(Map<String, Object> param);


    /**
     * 查询优惠券单独活动信息，无优惠券
     * @param couponIssue
     * @return
     */
    CouponIssue selectCouponIssueInfo(CouponIssue couponIssue);

    /**
     * 查询该用户当天参加本次优惠券的活动次数
     * @param couponUserGiveCount
     * @return
     */
    int selectCouponUserGiveCountByToday(CouponUserGiveCount couponUserGiveCount);

    int selectCouponUser(String couponIssueId,String  mobilePhone);

    /**
     * 统计优惠券数量
     * @param mobilePhone
     * @param enterpriseId
     * @return
     */
    int setCoupnCount(@Param("phoe") String mobilePhone,  @Param("enterId") Integer enterpriseId);

    /**
     * 保存用户优惠券
     * @param couponUser
     * @return
     */
    int saveCouponUser(CouponUser  couponUser);

    /**
     * 批量保存用户优惠券
     * @param couponUsersList
     * @return
     */
    int saveBatchCouponUser(@Param("couponUsersList") List<CouponUser> couponUsersList);

    /**
     * 更新优惠券模板数量
     * @param couponTemplate
     * @return
     */
    int updateCouponTemplate(CouponTemplate couponTemplate);

    /**
     * 批量更新优惠券模板领取数量
     * @param ids
     * @return
     */
    int updateBatchCouponTemplate(@Param("ids") List<Integer> ids);

    /**
     * 更新用户优惠券信息
     * @param couponUser
     * @return
     */
    int updateCouponUser(CouponUser couponUser);

    /***
     * 查询用户已有优惠券
     * @param param
     * @return
     */
    List<CouponUser> selectCouponUserList(Map<String, Object> param);

    /**
     * 查询用户核销优惠券列表
     * @param couponUser
     * @return
     */
    List<CouponUser> selectVerUserCouponList(CouponUser couponUser);

    /***
     * 用户进入领取页面的次数
     * @param couponUserGiveCount
     * @return
     */
    CouponUserGiveCount selectCouponUserGiveCount(CouponUserGiveCount couponUserGiveCount);

    /**
     * 更新用户进入领取页面的次数
     * @param couponUserGiveCount
     */
    int updateCouponUserGiveCount(CouponUserGiveCount couponUserGiveCount);

    /**
     * 新增用户进入该领取方式次数信息
     * @param couponUserGiveCount
     */
    int insertCouponUserGiveCount(CouponUserGiveCount couponUserGiveCount);

    /**
     * 查询用户进入该领取方式参与次数
     * @param couponUser
     * @return
     */
    int selectUserIssueGiveCount(CouponUserGiveCount couponUser);

    /***
     * 根据用户已领取优惠券查询用户领取的优惠券模板列
     * @param couponUser
     * @return
     */
    List<CouponTemplate> selectCouponTemListByCouponUser(CouponUser couponUser);

    /***
     * 批量查询模板列
     * @param couponTemplate
     * @return
     */
    List<CouponTemplate> selectCouponTemListByTemIds(CouponTemplate couponTemplate);

    /***
     * 查询优惠券模板信息
     * @param couponTemplate
     * @return
     */
    CouponTemplate selectCouponTemInfoById(CouponTemplate couponTemplate);

    /***
     * 查询用户所有的优惠券 公众号展示用户优惠用
     * @param couponUser
     * @return
     */
    List<CouponUser> selectUserAllCouponsByVtime(CouponUser couponUser);

    /***
     * 查询用户所有的优惠券 公众号展示用户优惠用
     * @param couponUser
     * @return
     */
    List<CouponUser> selectUserAllCoupons(CouponUser couponUser);

    /***
     * 查询用户已过期的优惠券 公众号展示用户优惠用
     * @param couponUser
     * @return
     */
    List<CouponUser> selectUsedCoupons(CouponUser couponUser);

    /***
     * 查询最后一次领取的随机数
     * @param couponUser
     * @return
     */
    CouponUser selectUserIssueRedomMax(CouponUserGiveCount couponUser);

    /**
     * 查询用户该领取方式下已有的优惠券数量
     * @param couponUser
     * @return
     */
    int selectCouUserSum(CouponUser couponUser);

    /**
     * 查询用户可用优惠券
     * @param couponUser
     * @return
     */
    List<CouponUser> selectUsefulCoupon(CouponUser couponUser);

    /**
     * 查询用户所有即将到期的优惠券
     * @param couponUserDto
     * @return
     */
    List<CouponUserVo> selectUsefulExpireCoupon(CouponUserDto couponUserDto);

    int updateCouponPushTime(@Param("stationId") Integer stationId,@Param("mobilePhone") String mobilePhone);

    /**
     * 查询用户充值活动赠送的优惠券
     * @param couponUser
     * @return
     */
    List<CouponUser> selectCZHDUsefulCoupon(CouponUser couponUser);

    BigDecimal queryMinUseCouponAtmByCouponTemlete(Integer id);

    List<String> getCouponActivity(Integer enterpriseId);


    List<CouponInfo> getCouponInfoByCouponIssue(List<String> couponIssues);

    List<CouponPushMessageRuleVo> selectCouponPushMessageRule();
}
